import java.util.Stack;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-04-29
 * Time:14:14
 */

/**
 * JZ30包含min函数的栈
 */

public class Thestackcontainingtheminfunction {
    /** "PSH-1"表示将-1压入栈中，栈中元素为-1
     "PSH2"表示将2压入栈中，栈中元素为2，-1
     “MIN”表示获取此时栈中最小元素==>返回-1
     "TOP"表示获取栈顶元素==>返回2
     "POP"表示弹出栈顶元素，弹出2，栈中元素为-1
     "PSH1"表示将1压入栈中，栈中元素为1，-1
     "TOP"表示获取栈顶元素==>返回1
     “MIN”表示获取此时栈中最小元素==>返回-1
    */
    Stack<Integer> stack = new Stack<>();
    Stack<Integer> min = new Stack<>();
    public void push(int node) {
        stack.push(node);
        if (!min.isEmpty()){
            if (node >= min.peek()){
                min.add(min.peek());
            }else {
                min.add(node);
            }
        }else {
            min.add(node);
        }
    }

    public void pop() {
        stack.pop();
        min.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int min() {
        return min.peek();
    }
}
